home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Amiga Public Domain Connection
/
APDC Disk #005 - Amiga Basic Programs (198x)(Amiga Public Domain Connection)(US)[WB].zip
/
APDC Disk #005 - Amiga Basic Programs (198x)(Amiga Public Domain Connection)(US)[WB].adf
/
Laser_Strike
(
.txt
)
< prev
next >
Wrap
AmigaBASIC Source Code
|
1988-03-13
|
7KB
|
202 lines
DEFINT a-z:DEFSNG r,g,b
DIM g(1,9,9),c(1,9,9),nh(1,5),xh(1,5),yh(1,5),dx(1,5),dy(1,5),ta(1,5),s(27,8),w1(255),w2(255)
SCREEN 1,320,200,3,1:WINDOW 3,"",(0,0)-(311,186),16,1:WINDOW OUTPUT 3:COLOR 6 ,0
FOR i=0 TO 255:w1(i)=RND*255-128:w2(i)=RND*255-128:NEXT
RESTORE PaletteData:FOR i=0 TO 7:READ r,g,b:PALETTE i,r,g,b:NEXT
PaletteData:
DATA .13,0,.73,.13,0,.73,1,.73,0,.8,0,.93,.33,.87,0,.8,.2,0,.9,.9,.9,0,.73,.73
RESTORE VoiceData:FOR i=0 TO 8:READ v%(i):NEXT
VoiceData:
DATA 110,0,150,0,22200,64,10,1,0
WIDTH 40:CLS:RANDOMIZE TIMER
FOR co=1 TO 7:CLS:LINE(1,1)-(7,7),co,BF:GET(1,1)-(8,8),s(0,co):NEXT
CLS:LOCATE 11,14:CALL Echo("LASER STRIKE",v%()):PRINT
gx(0)=24:gx(1)=192:gy=64
b$=" "
RESTORE ShipNames:FOR i=2 TO 5:READ s$(i):NEXT
ShipNames:
DATA Explorer,Fighter,Bomber,Mothership
FOR i=0 TO 1
PRINT "Player"+STR$(i+1);:INPUT p$(i):IF p$(i)="" THEN cp(i)=1:p$(i)="Computer"
PALETTE 1,0.5,0.5,0.5
NEXT:CLS:LOCATE 7,6:COLOR 1,0:PRINT"GRID 1"SPC(15)"GRID 2"
GOSUB DrawGrid:LOCATE 20,1:COLOR 6,0
FOR n=5 TO 2 STEP-1:l=10-LEN(s$(n))
PRINT SPC(l)s$(n)SPC(13+l)s$(n):NEXT
DeploySHips:
d=0:FOR pp=0 TO 1:p=ABS(pp-1):ls(p)=5:FOR n=5 TO 2 STEP -1:er=1
COLOR 6,0
WHILE er=1
LOCATE 1,1:PRINT p$(pp)
PRINT"Deploy your "s$(n)".";
FOR i=1 TO n:PUT(i*8+POS(0)*8,8),s(0,n),PSET:NEXT
LOCATE 7,6:COLOR p,ABS(p-1):PRINT"GRID 1";:COLOR ABS(p-1),p:PRINT SPC(15)"GRID 2"
COLOR 6,0 : LOCATE 3,1
IF cp(pp)=0 THEN GOSUB Human :ELSE x=INT(RND*(10-n)):y=INT(RND*(10-n))
GOSUB SelectDir
WEND
GOSUB ClearTop:NEXT:GOSUB DrawGrid:NEXT
p=1:d=1:GOSUB ClearTop
FOR i=0 TO 1:px(i)=0:py(i)=0:NEXT
MainLoop:
WHILE th(p)<14:p=ABS(p-1):pp=p:WHILE INKEY$<>"":WEND
LOCATE 7,6:COLOR p,ABS(p-1):PRINT"GRID 1";:COLOR ABS(p-1),p:PRINT SPC(15)"GRID 2"
LOCATE 1,1:COLOR 0,1:PRINT p$(p)
PRINT"Position and fire laser."
IF cp(p)=0 THEN GOSUB Human :ELSE GOSUB Computer
GOSUB FireLaser:GOSUB PutFigure:GOSUB ClearTop
WEND
EndGame:
COLOR 5,0:CLS:LOCATE 11,15:CALL Echo("GAME OVER",v%())
COLOR 4:LOCATE 13,20-LEN(p$(p))/2:CALL Echo(p$(p),v%())
LOCATE 14,9:CALL Echo("Has freed the galaxy!",v%())
COLOR 2:LOCATE 17,12:PRINT"Play again [Y/N]"
SAY TRANSLATE$("play again"),v%:c=1
WHILE k$<>"Y" AND k$<>"N"
k$=UCASE$(INKEY$):c=ABS(c-1)
COLOR 5+c:LOCATE 11,15:PRINT"GAME OVER":FOR i=1 TO 200:NEXT
LOCATE 11,1:PRINT b$:FOR i=1 TO 200:NEXT
WEND
IF k$="Y" THEN RUN
IF k$="N" THEN CLS:END
delay:FOR i=1 TO 1500:NEXT:RETURN
ClearTop:LOCATE 1,1:COLOR,d:FOR i=1 TO 5:PRINT b$:NEXT:RETURN
PutFigure:PUT(x*8+gx(p),y*8+gy),s(0,co),PSET:pc=c(p,x,y):c(p,x,y)=co:RETURN
DrawGrid:
co=7:FOR y=0 TO 9:FOR x=0 TO 9:FOR p=0 TO 1:IF c(p,x,y)<>1 THEN GOSUB PutFigure
NEXT p,x,y:RETURN
CheckXY:
IF x<0 OR x>9 THEN er=1
IF y<0 OR y>9 THEN er=1
RETURN
FitShip:
x1=x
80 x1=x1+1:IF x1<=9 THEN IF g(p,x1,y)<>1 THEN 80
xp=x1-x:x1=x
90 x1=x1-1:IF x1>=0 THEN IF g(p,x1,y)<>1 THEN 90
xn=x-x1:tx=xn+xp-1:y1=y
100 y1=y1+1:IF y1<=9 THEN IF g(p,x,y1)<>1 THEN 100
yp=y1-y:y1=y
110 y1=y1-1:IF y1>=0 THEN IF g(p,x,y1)<>1 THEN 110
yn=y-y1:ty=yn+yp-1:RETURN
Human:
x=px(p):y=py(p):x1=x:y1=y:k$=""
begin:
WHILE MOUSE(0)<>1 : k$=INKEY$
WEND:
x=INT((MOUSE(3)-gx(p)+1)/8) : y=INT((MOUSE(4)-gy)/8)
IF x < 0 THEN oops
IF x > 9 THEN oops
IF y < 0 THEN oops
IF y > 9 THEN oops
GOTO whew
oops:
LOCATE 4,1:COLOR 5:PRINT "OUT OF BOUNDS, try again:"
GOSUB delay: GOSUB delay : GOSUB delay
COLOR 6: LOCATE 4,1 : PRINT b$
GOTO begin
whew:
co=pc : GOSUB PutFigure
px(p)=x : py(p)=y : RETURN
Computer:
h=0:FOR n=2 TO 5:IF nh(p,n)>0 AND nh(p,n)<n THEN sh=n:h=1
NEXT:IF h=0 THEN 40
x=xh(p,sh):y=yh(p,sh):IF nh(p,sh)>1 THEN 20
FOR i=0 TO 3:pr(i)=0:NEXT
10 r=INT(RND*4):IF pr(r)=1 THEN 10
dx(p,sh)=0:dy(p,sh)=0:er=0:pr(r)=1:GOSUB FitShip
IF r=0 THEN dx(p,sh)=1:IF tx<sh OR xp<xn THEN er=1
IF r=1 THEN dx(p,sh)=-1:IF tx<sh OR xn<xp THEN er=1
IF r=2 THEN dy(p,sh)=1:IF ty<sh OR yp<yn THEN er=1
IF r=3 THEN dy(p,sh)=-1:IF ty<sh OR yn<yp THEN er=1
x=x+dx(p,sh):y=y+dy(p,sh)
GOSUB CheckXY:IF er=0 THEN IF g(p,x,y)<>1 THEN 50
x=x-dx(p,sh):y=y-dy(p,sh):GOTO 10
20 x=x+dx(p,sh):y=y+dy(p,sh)
er=0:GOSUB CheckXY:IF er=1 THEN GOSUB 30: GOTO 20
IF g(p,x,y)=1 THEN GOSUB 30:GOTO 20
IF g(p,x,y)=0 THEN GOSUB 30
GOTO 50
30 IF ta(p,sh)=0 THEN dx(p,sh)=-dx(p,sh):dy(p,sh)=-dy(p,sh):ta(p,sh)=1
RETURN
40 x=INT(RND*10):y=INT(RND*10)
IF ((x+y) AND 1)=0 THEN 40
IF g(p,x,y)=1 THEN 40
GOSUB FitShip:IF tx<ls(p) AND ty<ls(p) THEN 40
50 co=6:GOSUB PutFigure:RETURN
SelectDir:
IF g(p,x,y)<>0 THEN GOTO 70
k$=CHR$(29+INT(RND*2))
IF cp(pp)=0 THEN
PRINT"Horizontal [right] or vertical [down]?"
k$="":WHILE k$<>CHR$(30) AND k$<>CHR$(29):k$=INKEY$:WEND
END IF:er=0
IF k$=CHR$(30) THEN GOTO 60
IF y+n-1>9 THEN GOTO 70
FOR i=y TO y+n-1:IF g(p,x,i)<>0 THEN er=1
NEXT:IF er=1 THEN GOTO 70
y1=y:FOR y=y1 TO y1+n-1:g(p,x,y)=n:IF cp(pp)=0 THEN co=n:GOSUB PutFigure
NEXT:RETURN
60 IF x+n-1>9 THEN GOTO 70
FOR i=x TO x+n-1:IF g(p,i,y)<>0 THEN er=1
NEXT:IF er=1 THEN GOTO 70
x1=x:FOR x=x1 TO x1+n-1:g(p,x,y)=n:IF cp(pp)=0 THEN co=n:GOSUB PutFigure
NEXT:RETURN
70 er=1:IF cp(pp)=0 THEN LOCATE 4,1:COLOR 5:PRINT"INVALID CHOICE":GOSUB delay
COLOR 6:co=pc:GOSUB PutFigure:GOSUB ClearTop:RETURN
FireLaser:
WAVE 0,SIN:WAVE 1,SIN:k=1
FOR i=250 TO 1 STEP -75:k=ABS(k-1):SOUND 660,0.5,i,k
FOR j=1 TO 500:NEXT:SOUND 0,0,0,k:FOR j=1 TO 500:NEXT:NEXT
n=g(p,x,y)
IF n=0 THEN PRINT"MISS!":GOSUB delay:co=1:g(p,x,y)=1:RETURN
IF n=1 THEN PRINT"ALREADY HIT":co=pc:GOSUB delay:RETURN
co=n:PRINT"DIRECT HIT!"
WAVE 0,w1:WAVE 1,w2
FOR i=255 TO 10 STEP-10:SOUND 100,0.1,i,0:SOUND 100,0.1,i,3:FOR j=1 TO RND*20:NEXT:NEXT
nh(p,n)=nh(p,n)+1:th(p)=th(p)+1
g(p,x,y)=1:PUT((10+23*p+nh(p,n))*8,(24-n)*8),s(0,n),PSET
IF n<>nh(p,n) THEN
xh(p,n)=x:yh(p,n)=y
ELSE
FOR i=2 TO 5:IF nh(p,i)=0 THEN ls(p)=i
NEXT
IF n<>4 THEN
SAY TRANSLATE$(s$(n)+" deestroyed"),v%:c=1
ELSE
SAY TRANSLATE$("bommer deestroyed"),v%:PRINT s$(n)
END IF
FOR i=1 TO 10:c=ABS(c-1):COLOR n+(6-n)*c,c
LOCATE 4,20-LEN(s$(n))/2:PRINT UCASE$(s$(n))
LOCATE 5,15:PRINT"DESTROYED!":FOR j=1 TO 50:NEXT:NEXT
END IF
FOR i=1 TO 500:NEXT:RETURN
SUB Echo(s$,v%(1)) STATIC
SAY TRANSLATE$(s$),v%:PRINT s$:END SUB